{
"cells": [
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "view-in-github"
},
"source": [
""
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "GfTfNF2YzGZ2"
},
"source": [
"# Non-Linear Shooting Method\n",
"#### John S Butler john.s.butler@tudublin.ie [Course Notes](https://johnsbutler.netlify.com/files/Teaching/Numerical_Analysis_for_Differential_Equations.pdf) [Github](https://github.com/john-s-butler-dit/Numerical-Analysis-Python)\n",
"\n",
"## Overview\n",
"This notebook illustates the implentation of a the non-linear shooting method to a non-linear boundary value problem.\n",
"\n",
"The non-linear shooting method is a bit like the game Angry Birds to make a first guess and then you refine.\n",
"The video below walks through the code."
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 336
},
"id": "991Wc_p2zGZ5",
"outputId": "784079d8-a10a-4219-fa04-e6c34b261a79"
},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
""
]
},
"execution_count": 1,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from IPython.display import HTML\n",
"HTML('')"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "HPtzoUb2zGZ6"
},
"source": [
"## Introduction\n",
"To numerically approximate the non-linear Boundary Value Problem\n",
"\\begin{equation}\n",
"y^{''}=f(x,y,y^{'}), \\ \\ \\ a < x < b, \\end{equation}\n",
"with the boundary conditions \\begin{equation} y(a)=\\alpha,\\end{equation} and\n",
"\\begin{equation}y(b) =\\beta,\\end{equation}\n",
"using the non-linear shooting method, the Boundary Value Problem is divided into two Initial Value Problems:\n",
"1. The first 2nd order non-linear Initial Value Problem is the same as the original Boundary Value Problem with an extra initial condtion $y_1^{'}(a)=\\lambda_0$. \n",
"\\begin{equation}\n",
" y^{''}_1=f(x,y,y^{'}), \\ \\ y_1(a)=\\alpha, \\ \\ \\color{red}{y^{'}_1(a)=\\lambda_0},\\\\\n",
"\\end{equation}\n",
"2. The second 2nd order Initial Value Problem is with respect to $z=\\frac{\\partial y}{\\partial \\lambda}$ with the initial condtions $z(a)=0$ and $z^{'}(a)=1$.\n",
"\n",
"\\begin{equation}\n",
"z^{''}=\\frac{\\partial f}{\\partial y^{'}}z^{'}(x,\\lambda)+\\frac{\\partial f}{\\partial y}z(x,\\lambda), \\ \\ \\color{green}{z(a)=0, \\ \\ z^{'}(a)=1}.\n",
"\\end{equation}\n",
"combining these results together to get the unique solution \n",
"\\begin{equation}\n",
"y(x)=y_1(x).\n",
"\\end{equation}\n",
"Unlike the linear method, the non-linear shooting method is iterative to get the value of $\\lambda$ that results in the same solution as the Boundary Value Problem.\n",
"\n",
"The first choice of $\\lambda_0$ is a guess, then after the first iteration a Newton Raphson method is used to update $\\lambda,$ \n",
"\n",
"\\begin{equation} \\lambda_k=\\lambda_{k-1}-\\frac{y_1(b,\\lambda_{k-1})-\\beta}{\\frac{dy}{d \\lambda}(b,\\lambda_{k-1})},\\end{equation}\n",
"which can be re-written as,\n",
"\\begin{equation}\\lambda_k=\\lambda_{k-1}-\\frac{y_1(b,\\lambda_{k-1})-\\beta}{z(b,\\lambda_{k-1})},\\end{equation}\n",
"\n",
"until $|\\lambda_{k}-\\lambda_{k-1}|"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"## BVP\n",
"N=10\n",
"h=1/N\n",
"x=np.linspace(0,1,N+1)\n",
"fig = plt.figure(figsize=(10,4))\n",
"plt.plot(x,0*x,'o:',color='red')\n",
"plt.xlim((0,1))\n",
"plt.xlabel('x',fontsize=16)\n",
"plt.title('Illustration of discrete time points for h=%s'%(h),fontsize=32)\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "HmHdE2oYzGZ_"
},
"source": [
"## Initial conditions\n",
"The initial conditions for the discrete equations are:\n",
"\\begin{equation} u_1[0]=-2.5\\end{equation}\n",
"\\begin{equation} u_2[0]=\\lambda_0\\end{equation}\n",
"\\begin{equation} z_1[0]=0\\end{equation}\n",
"\\begin{equation} z_2[0]=1\\end{equation}\n",
"\\begin{equation}\\beta=3\\end{equation}\n",
"Let $\\lambda_0=0.2$\n"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"id": "-9H0BSlvzGaA"
},
"outputs": [],
"source": [
"U1=np.zeros(N+1)\n",
"U2=np.zeros(N+1)\n",
"Z1=np.zeros(N+1)\n",
"Z2=np.zeros(N+1)\n",
"\n",
"lambda_app=[0.2]\n",
"U1[0]=-2.5\n",
"U2[0]=lambda_app[0]\n",
"\n",
"Z1[0]=0\n",
"Z2[0]=1\n",
"beta=3"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "Lv5DdgvwzGaB"
},
"source": [
"## Numerical method\n",
"The Euler method is applied to numerically approximate the solution of the system of the two second order non-linear initial value problems they are converted in to two pairs of two first order non-linear initial value problems:\n",
"1. Discrete form of Equation 1\n",
"\\begin{equation}u_{1 }[i+1]=u_{1}[i] + h u_{2 }[i]\\end{equation}\n",
"\\begin{equation}u_{2 }[i+1]=u_{2 }[i] + h (-2u_{1}[i]u_{2 }[i])\\end{equation}\n",
"with the initial conditions $u_{1}[0]=-2.5$ and $u_{2}[0]=\\lambda_0.$\n",
"\n",
"\n",
"2. Discrete form of Equation 2\n",
"\\begin{equation}z_{1}[i+1]=z_{1 }[i] + h z_{2 }[i]\\end{equation}\n",
"\\begin{equation}z_{2}[i+1]=z_{2 }[i] + h (-2z_{2}[i]y_{1 }[i]-2z_{1 }[i] y_{2 }[i])\\end{equation}\n",
"with the initial conditions $z_{1}[0]=0$ and $z_{2}[0]=1$.\n",
"\n",
"At the end of each iteration \n",
"\\begin{equation} u_1[i] \\approx y(x_i).\\end{equation}\n",
"The initial choice of $\\lambda_0=0.2$ is up to the user then for each iteration of the system $\\lambda$ is updated using the formula:\n",
"\\begin{equation}\\lambda_k=\\lambda_{k-1}-\\frac{u_1[10]-3}{z_1[10]}.\\end{equation}\n",
"\n",
"The plot below shows the numerical approximation of the solution to the non-linear Boundary Value Problem for each iteration.\n",
"\n",
"The stopping criteria for the iterative process is\n",
"\\begin{equation}|\\lambda_k-\\lambda_{k-1}|"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"tol=0.0001\n",
"k=0\n",
"fig = plt.figure(figsize=(10,4))\n",
"while k<20:\n",
" k=k+1\n",
" for i in range (0,N):\n",
" U1[i+1]=U1[i]+h*(U2[i])\n",
" U2[i+1]=U2[i]+h*(-2*U2[i]*U1[i])\n",
" \n",
" Z1[i+1]=Z1[i]+h*(Z2[i])\n",
" Z2[i+1]=Z2[i]+h*(-2*U2[i]*Z1[i]-2*Z2[i]*U1[i])\n",
"\n",
" lambda_app.append(lambda_app[k-1]-(U1[N]-beta)/Z1[N])\n",
" \n",
" plt.plot(x,U1,':o',label=r\"$\\lambda$ %s\"%(k))\n",
" plt.xlabel('x',fontsize=16)\n",
" plt.ylabel('U1',fontsize=16)\n",
" U2[0]=lambda_app[k]\n",
" if abs(lambda_app[k]-lambda_app[k-1])"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"fig = plt.figure(figsize=(10,4))\n",
"plt.grid(True)\n",
"plt.plot(x,U1,'b:o')\n",
"plt.title(\"Numerical Approximation of the non-linear Boundary Value Problem\",fontsize=32)\n",
"plt.xlabel('x',fontsize=16)\n",
"plt.ylabel(\"u_1$\",fontsize=16)\n",
"plt.show()\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "pd8xjqDPzGaE"
},
"source": [
"## $\\lambda$ Iteration\n",
"The plot below shows the iterations of $\\lambda_k$, after $4$ iterations the value of $\\lambda$ stabilies."
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 284
},
"id": "PewLgoG2zGaE",
"outputId": "933c92f5-2398-4268-e34e-25855f4a14a2"
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"fig = plt.figure(figsize=(10,4))\n",
"plt.grid(True)\n",
"plt.plot(lambda_app,'o')\n",
"#plt.title(\"Values of $\\lambda$ for each interation \",fontsize=32)\n",
"plt.xlabel('Iterations (k)',fontsize=16)\n",
"plt.ylabel(\"lambda\",fontsize=16)\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"id": "0Cdj-PnGzGaF"
},
"outputs": [],
"source": []
}
],
"metadata": {
"colab": {
"include_colab_link": true,
"name": "602_Non-Linear Shooting Method.ipynb",
"provenance": []
},
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.11.4"
}
},
"nbformat": 4,
"nbformat_minor": 1
}